Workstations, personal computers, and/or servers (hereinafter referred to as “computer systems” or “computers”) normally include a basic input/output system (BIOS) which acts as an interface between a hardware of computer and at least one operating system (OS) installed on that computer. The BIOS may further have at least one software code and/or a firmware and/or instructions to trigger and initialize the hardware services of the computer, such as chipset drivers, video, basic keyboard, I/O port, disk drive, and the like service of motherboard. Apart from the initialization of services, the BIOS may also seek for the hardware related to peripheral cards that may include but not limited to PCI cards, and the controllers that resides on the peripheral cards. The BIOS instructions and/or firmware and/or instructions are normally stored on a flash memory of the computer that is stored in a location that is read and processed by a processor of the computer when the computer system is switched-on. The BIOS instructions are also initialized at the same time when the computer system is switched/powered-on.
Further, the flash memory of the computer may also include software that is specifically used to check the specific hardware present on the system. When the system is powered-on the software executes a power on self test (POST) to check the hardware present in the computer system. A disk drive POST from a cold boot and a random access memory (RAM) power on self test (POST) may also be performed by the processor based on the instructions of the software in the flash memory, otherwise the software may also instruct the processor to skip the POST for one or more hardware devices during a boot, in order to reduce the boot time of the system.
A typical boot process in a traditional computer system is shown in FIG. 1. As shown in the FIG. 1, when the system in powered on, the booting starts at the BIOS. The BIOS perform a power on self test (POST) that initializes all the devices including the RAM, the CPU and other devices like keyboard, monitor, and the like. If it is a multi-core or multi-processor system then one CPU is determined to be the boot CPU which executes the BIOS and a kernel initialization code. The remaining processors often called application processors (AP) remains idle till they are initialized by the kernel of an operating system (OS) at a later time. Once the BIOS initialization is done, then the boot device is located and a boot loader is loaded to the RAM and the control is passed to it. The boot loader determines which kernel of OS to boot from, loads the determined OS to RAM and passes the control to it. When the kernel of the OS starts executing, it initializes it resources and data structures that may include but not limited to the initialization of remaining application processors and finally executes the Init Scripts which initializes all the services of the computer system.
Conventionally, the computer systems execute the booting process in sequential manner by the use of single CPU. In order to optimize the boot time in the sequential processing there are various methods used presently. Few of the existing methods to optimize the boot time are mentioned below:                1. Reducing a Boot/an operating system size.        2. A multithreaded execution of initialization of at least one routine of the services, and/or init scripts.        3. Hardware assisted/an accelerated boot steps that uses faster cache/storage device.        4. A parallel execution of some boot steps using a multiprocessor/multi-core. In this boot processor/core dispatches certain block of the tasks of the BIOS to other core's to execute them in parallel. The boot processor/the core waits/polls for other core's to complete their task, then continue with the boot process. FIG. 2 shown a parallelization of BIOS/Init scripts.        5. Snapshot booting method.        
Though, all the above mentioned methods are used to optimize the boot time of the computer system, they still have a massive drawback of an amount of time that is spent in the booting process, and reducing the booting time.
To avoid the above mentioned drawbacks, and to provide a boot time optimization, a “Booting method for computer system with multiple central processing units” was proposed in a patent application PCT/CN2013/072764 by “Huawei Technologies Co., Ltd” in 2012. In PCT/CN2013/072764, the booting method for computer system with multiple central processing units, which provides a framework for parallel execution of entire boot process using Task Description Chart (TDC), is disclosed. The TDC includes all the tasks that are essentially to be performed for proper working of any computer system. The complete parallelization of whole boot process of booting is disclosed in the prior-art. In PCT/CN2013/072764, the scheduler depends on the TDC of the target. The actual scheduling happens during the boot-up. A priority, dependency and a task status checks are made during task scheduling. FIG. 3 shows a parallel boot method on a multiple cores/processors.
Even though the prior system as disclosed in PCT/CN2013/072764 is used for optimization of boot time by providing a parallel execution of entire boot process, still there are drawbacks for the disclosed method. Few of the drawbacks are mentioned below:                1. As the priority, dependency and the task status checks are made during task scheduling, this adds performance overhead onto the system.        2. When the number of boot time tasks is high, this normally is the case in many systems, the overhead for scheduling increases.        3. Scheduling happens on the target and hence adds overhead to the boot process.        4. The dependency checks are done on the target, this also adds overhead to the boot process.        5. The memory requirements are considered on the target, this may add certain overhead to the boot process management.        6. Also, the complete utilization of the cores may be hindered due to the dependency check and online scheduling decisions.        
While the techniques for optimization in boot process time are growing, there still exists a need to optimize boot time of computers having multiple CPUs. Accordingly, what would be desirable, but has not yet been provided, is an optimized method of and system for booting computers having multiple central processing units (CPUs) with reduced overheads and less booting time.